/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.unicamp.ic.sgct.client.apresentacao.views;

import br.unicamp.ic.sgct.client.apresentacao.widgets.LabelCampoForm;
import br.unicamp.ic.sgct.client.dominio.to.AvaliadorTO;
import br.unicamp.ic.sgct.client.dominio.to.ChairTO;
import br.unicamp.ic.sgct.client.dominio.to.ParticipanteTO;
import br.unicamp.ic.sgct.client.dominio.to.PreletorTO;
import br.unicamp.ic.sgct.client.dominio.to.UsuarioTO;
import br.unicamp.ic.sgct.client.dominio.to.VisitanteTO;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

/**
 *
 * @author arthur
 */
public class ViewDadosUsuario extends Composite {

    private VerticalPanel panelDadosUsuario = new VerticalPanel();
    private VerticalPanel panelADDVertical = new VerticalPanel();
    private HorizontalPanel panelADD = new HorizontalPanel();
    private Grid gridDadosUsuario = new Grid(4, 1);
    private HTML strTabTitle = null;
    private int index = 0;

    public ViewDadosUsuario(String title, int index) {
        this.panelDadosUsuario.setVisible(false);
        this.panelDadosUsuario.add(gridDadosUsuario);
        this.strTabTitle = new HTML(title);
        this.index = index;
        this.panelDadosUsuario.add(panelADDVertical);
        this.panelDadosUsuario.add(panelADD);
        initWidget(panelDadosUsuario);
    }

    public ViewDadosUsuario addH(Widget w) {
        if (w == null) {
            Window.alert("ERRO: public ViewDadosUsuario add(Widget w)");
        }
        panelADD.add(w);
        return this;
    }

    public ViewDadosUsuario addV(Widget w) {
        if (w == null) {
            Window.alert("ERRO: public ViewDadosUsuario add(Widget w)");
        }
        panelADDVertical.add(w);
        return this;
    }

    public void montar(UsuarioTO to) {
        gridDadosUsuario.clear();
        if (to instanceof ParticipanteTO) {
            montarGridDadosParticipante((ParticipanteTO) to);
        } else {
            if (to instanceof AvaliadorTO) {
                montarGridDadosAvaliador((AvaliadorTO) to);
            } else {
                if (to instanceof VisitanteTO) {
                    montarGridDadosVisitante((VisitanteTO) to);
                } else {
                    if (to instanceof PreletorTO) {
                        montarGridDadosPreletor((PreletorTO) to);
                    } else {
                        if (to instanceof ChairTO) {
                            montarGridDadosChair((ChairTO) to);
                        }
                    }
                }
            }
        }
    }

    private void montarGridDadosPreletor(PreletorTO preletor) {
        gridDadosUsuario.setBorderWidth(0);
        gridDadosUsuario.setCellSpacing(4);
        gridDadosUsuario.setCellPadding(6);
        gridDadosUsuario.setWidget(0, 0, new LabelCampoForm(preletor.getTipo().toUpperCase()));
        gridDadosUsuario.setWidget(1, 0, montarGridDadosUsuario(preletor));
    }

    private void montarGridDadosChair(ChairTO chair) {
        gridDadosUsuario.setBorderWidth(0);
        gridDadosUsuario.setCellSpacing(4);
        gridDadosUsuario.setCellPadding(6);
        gridDadosUsuario.setWidget(0, 0, new LabelCampoForm(chair.getTipo().toUpperCase()));
        gridDadosUsuario.setWidget(1, 0, montarGridDadosUsuario(chair));
    }

    private void montarGridDadosVisitante(VisitanteTO visitante) {
        gridDadosUsuario.setBorderWidth(0);
        gridDadosUsuario.setCellSpacing(4);
        gridDadosUsuario.setCellPadding(6);
        gridDadosUsuario.setWidget(0, 0, new LabelCampoForm(visitante.getTipo().toUpperCase()));
        gridDadosUsuario.setWidget(1, 0, montarGridDadosUsuario(visitante));
    }

    private void montarGridDadosAvaliador(AvaliadorTO avaliador) {
        gridDadosUsuario.setBorderWidth(0);
        gridDadosUsuario.setCellSpacing(4);
        gridDadosUsuario.setCellPadding(6);
        gridDadosUsuario.setWidget(0, 0, new LabelCampoForm(avaliador.getTipo().toUpperCase()));
        gridDadosUsuario.setWidget(1, 0, montarGridDadosUsuario(avaliador));
        gridDadosUsuario.setWidget(2, 0, new LabelCampoForm("Trabalhos Avalia\u00e7\u00e3o"));
        gridDadosUsuario.setWidget(3, 0, ViewUtil.montarGridTrabalhos(avaliador.getTrabalhos()));
    }

    private void montarGridDadosParticipante(ParticipanteTO participante) {
        gridDadosUsuario.setBorderWidth(0);
        gridDadosUsuario.setCellSpacing(4);
        gridDadosUsuario.setCellPadding(6);
        gridDadosUsuario.setWidget(0, 0, new LabelCampoForm(participante.getTipo().toUpperCase()));
        gridDadosUsuario.setWidget(1, 0, montarGridDadosUsuario(participante));
        if(participante.getAreasTO() != null && ! participante.getAreasTO().isEmpty()){
        gridDadosUsuario.setWidget(2, 0, new LabelCampoForm("Ã�reas de interesse"));
        gridDadosUsuario.setWidget(3, 0, ViewUtil.montarGridAreas(participante.getAreasTO()));
            
        }

    }

    /**
     * 
     * @param usuario
     * @return
     */
    private Grid montarGridDadosUsuario(UsuarioTO usuario) {
        Grid grid1 = new Grid(4, 2);
        grid1.setBorderWidth(0);
        grid1.setCellSpacing(4);
        grid1.setCellPadding(6);
        grid1.setWidget(0, 0, new LabelCampoForm("Nome"));
        grid1.setWidget(1, 0, new LabelCampoForm("Sobrenome"));
        grid1.setWidget(2, 0, new LabelCampoForm("Email"));
        grid1.setWidget(3, 0, new LabelCampoForm("Data Pagto"));
        grid1.setWidget(0, 1, new LabelCampoForm(usuario.getPessoa().getNome()));
        grid1.setWidget(1, 1, new LabelCampoForm(usuario.getPessoa().getSobreNome()));
        grid1.setWidget(2, 1, new LabelCampoForm(usuario.getEmail()));
        grid1.setWidget(3, 1, new LabelCampoForm(ViewUtil._dtTimeFormat.format(usuario.getDataEfetivacaoPagto())));
        return grid1;
    }

    /**
     * @return the strTabTitle
     */
    public HTML getStrTabTitle() {
        return strTabTitle;
    }
}
